package com.wg.springboot.T;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.wg.springboot.model.Student;

import java.util.HashMap;

/**
 * @Description:
 * @Author WuGang
 * @Date 2022/7/7 11:34
 * @Version 1.0
 */
public class R extends HashMap<String, Object> {
    public R setData(Object o) {
        put("data", o);
//        返回的是一个map
        return this;
    }

    //   <T> T  后面这个t才是返回值类型  前面那个<T>必须存在
    public <T> T getData() {
        T t = null;
        return t;
    }

    public <T> T getData(T 参数名) {
        T t = null;
        return t;
    }

    //    public <T> T getData(TypeReference  参数名){
//        T t=null;
//        return t;
//    }
    public <T> T getData(TypeReference<T> 参数名) {
//        传入的参数就是一个map  取key的value值就是一个对象，这个对象被包含与泛型下，能够转
        Object data = get("data");
        String jsonString = JSON.toJSONString(data);
//        TypeReference装的是具体转换成的类
        T t1 = JSON.parseObject(jsonString, 参数名);
        return t1;
    }

    public <T> T getData(Class<T> c) {
        Object data = get("data");
        String s = JSON.toJSONString(data);
//        c是具体类的类型 T是装所有具体类
        T t = JSON.parseObject(s, c);
        return t;
    }

    public <T> T getData2(Class<String> c) {
        Object data = get("data");
        String s = JSON.toJSONString(data);
//        可以转
        String o = JSON.parseObject(s, c);
        return null;
    }

    public static void main(String[] args) {
        Student student = new Student();
        student.setName("wg");
        R r = new R();
        r.put("data", student);
        Student student1 = r.getData(Student.class);
        Object data2 = r.getData2(String.class);
        Object rData = r.getData();
//        也行
        TypeReference<String> typeReference = new TypeReference<>() {
        };
//        总结就是TypeReference<>就相当于Class<>
        TypeReference<Student> typeReference2 = new TypeReference<>() {
        };
//        TypeReference typeReference3 = new TypeReference() {
//        };  这个要报错
        String data = r.getData(typeReference);
        Student data1 = r.getData(typeReference2);
    }
}
